from datetime import datetime
from typing import Optional, List, Union

from pydantic import BaseModel

from app.schemas.base_model import OrmBaseModel
from trader.context import Position


class StrategyExecParam(BaseModel):
    code: str


class PositionReport(BaseModel):
    positionType: Optional[int]
    # 建仓价格
    openPrice: Optional[float]
    # 建仓时间
    openTime: Optional[int]
    # 平仓价格
    closePrice: Optional[float]
    # 平仓时间
    closeTime: Optional[int]
    # 平仓类型,止盈，止损
    closeType: Optional[int]
    # 持仓数量
    quantity: Optional[int]
    # 当前价
    currentPrice: Optional[float]



class BackTraderReport(BaseModel):
    # 日期
    dates: Optional[List[int]]
    # 持仓情况
    positions: Optional[List[Union[None, PositionReport]]]

    # 策略收益
    totalReturns: Optional[str]

    # 策略年化收益
    totalAnnualizedReturns: Optional[str]

    # 超额收益
    excessReturn: Optional[str]

    # 基准收益
    benchmarkReturns: Optional[str]

    # alpha
    alpha: Optional[str]

    # beta
    beta: Optional[str]

    # 夏普比率
    shape: Optional[str]

    # 胜率
    winRatio: Optional[str]

    # 盈亏比
    profitLossRatio: Optional[str]

    # 最大回撤
    maxDrawdown: Optional[str]

    # 索提诺比率
    sortino: Optional[str]

    # 日均超额收益
    avgExcessReturn: Optional[str]

    # 超额收益最大回撤
    excessReturnMaxDrawdown: Optional[str]

    # 超额收益夏普比率
    excessReturnSharpe: Optional[str]

    # 日胜率
    dailyWinRatio: Optional[str]

    # 盈利次数
    winCount: Optional[str]

    # 亏损次数
    lossCount: Optional[str]

    # 信息比率
    informationRatio: Optional[str]

    # 策略波动率
    algorithmVolatility: Optional[str]

    # 基准波动率
    benchmarkVolatility: Optional[str]

    # 最大回撤区间
    maxDrawdownRange: Optional[str]


    # 策略收益率曲线
    dailyTotalReturnsRatio: Optional[List[float]]
    # 每日策略收益
    dailyProfit: Optional[List[float]]
    # 每日策略收益率
    # dailyProfitRatio: Optional[List[str]]
    # 每日基准收益
    # dailyBenchmarkReturns:Optional[List[str]]
    # 每日基准收益率
    # dailyBenchmarkReturnsRatio:Optional[List[str]]

    # 基准收益率曲线
    dailyTotalBenchmarkReturnsRatio:Optional[List[float]]
    # 超额收益率曲线
    dailyTotalExcessReturnRatio: Optional[List[float]]
    # 总资金
    totalCapitals: Optional[List[float]]

    # 下行波动率
    downsideRisk: Optional[str]





